<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    let sy1 = Symbol()
    console.log(sy1);
    console.log(typeof sy1);
    let sy2 = Symbol('a')
    let sy3 = Symbol('a')
    // symbol声明的变量是独一无二的。
    console.log(sy2 == sy3);
    let a = Symbol('a')
    // 初衷：对象中属性名冲突的问题
    let obj = {
        a: 1,
        b: 2,
        [a]: 3
    }
    console.log(obj);
    console.log(obj.a);
    console.log(obj[a]);
    // 不能获取symbol的属性
    for (let key in obj) {
        console.log(key);
    }
    console.log(Object.keys(obj));
    // Object.getOwnPropertySymbols函数 只能获取symbol类型
    console.log(Object.getOwnPropertySymbols(obj));
    // Reflect.ownKeys函数 获取所有属性  (重点)
    console.log(Reflect.ownKeys(obj));

    // Symbol.for函数 (了解)
    // 函数作用：根据参数名，去全局环境中搜索是否有以该symbol.for()参数为名的symbol值，
    // 有就返回它，没有就以该参数名来创建一个新的symbol值。
    let a_1 = Symbol.for('b')
    let a_2 = Symbol.for('b')
    console.log(a_1 == a_2);
    // Symbol.keyFor函数 (了解)
    // 函数作用：返回一个以被登记在全局环境中的symbol.for()值的key，没有就返回undefined。
    console.log(Symbol.keyFor(a_1));
    console.log(Symbol.keyFor(a));
</script>

</html>